/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controladores;

import java.util.List;
import subCategoria.CadastroSubCategoria;
import subCategoria.RepositorioSubCategoria;
import subCategoria.SubCategoria;
import subCategoria.SubCategoriaNaoCadastradoException;
import util.CamposObrigatoriosException;
import util.ErroAcessoRepositorioException;

/**
 *
 * @author Alberto
 */
public class ControladorSubCategoria {
    
    
    private RepositorioSubCategoria objRepositorioSubCategoria;

    public ControladorSubCategoria(RepositorioSubCategoria objRepositorioSubCategoria) {
        this.objRepositorioSubCategoria = objRepositorioSubCategoria;
    }
    
    /**
     * Metodo que ira cadastrar o SubCategoria
     * 
     * @param SubCategoria objSubCategoria
     * @return void
     */
    public void cadastrar(SubCategoria objSubCategoria) throws ErroAcessoRepositorioException, CamposObrigatoriosException{
        // Iniciando o cadastro
        CadastroSubCategoria objCadastroSubCategoria = new CadastroSubCategoria(this.objRepositorioSubCategoria);
           
        // Validando os dados
        if(objSubCategoria.getNome().trim().length() == 0) throw new CamposObrigatoriosException("Descrição Sub-Categoria");
        if(objSubCategoria.getCategoria().getIdCategoria() == 0) throw new CamposObrigatoriosException("Categoria");
        
        // Salvando os dados no banco
        this.objRepositorioSubCategoria.cadastrarAtualizar(objSubCategoria);
    }

    /**
     * Metodo que ira cadastrar o SubCategoria
     * 
     * @param SubCategoria objSubCategoria
     * @return void
     */
    public void atualizar(SubCategoria objSubCategoria) throws ErroAcessoRepositorioException, CamposObrigatoriosException{
        // Iniciando o cadastro
        CadastroSubCategoria objCadastroSubCategoria = new CadastroSubCategoria(this.objRepositorioSubCategoria);
           
        // Validando os dados
        if(objSubCategoria.getIdSubCategoria() == 0) throw new CamposObrigatoriosException("Id Sub-Categoria");
        if(objSubCategoria.getNome().trim().length() == 0) throw new CamposObrigatoriosException("Descrição Sub-Categoria");
        if(objSubCategoria.getCategoria().getIdCategoria() == 0) throw new CamposObrigatoriosException("Categoria");
        
        // Salvando os dados no banco
        objCadastroSubCategoria.cadastrarAtualizar(objSubCategoria);
    }
    
    /**
     * Metodo que ira produrar o SubCategoria
     *
     * @param int idSubCategoria
     * @return void
     */
    public SubCategoria procurar(int idSubCategoria) throws SubCategoriaNaoCadastradoException, ErroAcessoRepositorioException{
        // Iniciando o cadastro
        CadastroSubCategoria objCadastroSubCategoria = new CadastroSubCategoria(this.objRepositorioSubCategoria);
        // Retornando um objeto subcategoria
        return objCadastroSubCategoria.procurar(idSubCategoria);
    }

    /**
     * Metodo que ira verificar a existência do SubCategoria
     *
     * @param int idSubCategoria
     * @return void
     */
    public boolean existe(int idSubCategoria) throws ErroAcessoRepositorioException{
        // Iniciando o cadastro
        CadastroSubCategoria objCadastroSubCategoria = new CadastroSubCategoria(this.objRepositorioSubCategoria);
        // Retornando um objeto subcategoria
        return objCadastroSubCategoria.existe(idSubCategoria);
    }

    /**
     * Metodo que ira listar os SubCategorias
     *
     * @return Collection
     */
    public List<SubCategoria> listar(String strComplemento) throws Exception, ErroAcessoRepositorioException{
        // Iniciando o cadastro
        CadastroSubCategoria objCadastroSubCategoria = new CadastroSubCategoria(this.objRepositorioSubCategoria);
        // Retornando um objeto subcategoria
        return objCadastroSubCategoria.listar(strComplemento);
    }

    /**
     * Método que ira remover o SubCategoria do banco
     * 
     * @param idSubCategoria
     */
    public void remover(int idSubCategoria) throws SubCategoriaNaoCadastradoException, ErroAcessoRepositorioException{
        // Iniciando o cadastro
        CadastroSubCategoria objCadastroSubCategoria = new CadastroSubCategoria(this.objRepositorioSubCategoria);
        // Retornando um objeto subcategoria
        objCadastroSubCategoria.remover(idSubCategoria);
    }
    
    /**
     * Metodo que ira listar os SubCategorias
     *
     * @return Collection
     */
    public List<SubCategoria> listarAtivo() throws Exception, ErroAcessoRepositorioException {
        // Iniciando o cadastro
        CadastroSubCategoria objCadastroSubCategoria = new CadastroSubCategoria(this.objRepositorioSubCategoria);
        // Retornando um objeto subcategoria
        return objCadastroSubCategoria.listarAtivo();
    }
    
    /**
     * Metodo que ira listar os Categorias
     *
     * @return Collection
     */
    public List<SubCategoria> procurarPorDescricaoPorCategoria(String descricaoSubCategoria, int idCategoria) throws CamposObrigatoriosException, Exception, ErroAcessoRepositorioException {
        // Iniciando o cadastro
        CadastroSubCategoria objCadastroSubCategoria = new CadastroSubCategoria(this.objRepositorioSubCategoria);
        
        if(descricaoSubCategoria.trim().length() == 0 && idCategoria == 0) throw new CamposObrigatoriosException("Descrição Sub categoria ou Categoria");
        
        // Retornando um objeto subcategoria
        return objCadastroSubCategoria.procurarPorDescricaoPorCategoria(descricaoSubCategoria, idCategoria);
    }
}